#include "Factory.h"

std::string AbstractFactory::CreateFurniture(std::shared_ptr< AbstractLogistics> log)
{
	std::shared_ptr<AbstractChair> chair = CreateChair();
	std::shared_ptr<AbstractSofa> sofa = CreateSofa();
	std::shared_ptr<AbstractTable> table = CreateTable();
	
	std::string result = chair->ProductChair() + " + " + sofa->ProductSofa() + " + " + table->ProductTable()+log->PlaneDeliver();
	return result;
}


std::shared_ptr<AbstractChair> Art_DecoFactory::CreateChair() const
{
	return std::make_shared<Art_DecoChair>();
}

std::shared_ptr<AbstractSofa> Art_DecoFactory::CreateSofa() const
{
	return std::make_shared<Art_DecoSofa>();
}

std::shared_ptr<AbstractTable> Art_DecoFactory::CreateTable() const
{
	return std::make_shared<Art_DecoTable>();
}

std::shared_ptr<AbstractChair> VictorianFactory::CreateChair() const
{
	return std::make_shared<VictorianChair>();
}

std::shared_ptr<AbstractSofa> VictorianFactory::CreateSofa() const
{
	return std::make_shared<VictorianSofa>();
}

std::shared_ptr<AbstractTable> VictorianFactory::CreateTable() const
{
	return std::make_shared<VictorianTable>();
}

std::shared_ptr<AbstractChair> ModernFactory::CreateChair() const
{
	return std::make_shared<ModernChair>();
}

std::shared_ptr<AbstractSofa> ModernFactory::CreateSofa() const
{
	return std::make_shared<ModernSofa>();
}

std::shared_ptr<AbstractTable> ModernFactory::CreateTable() const
{
	return std::make_shared<ModernTable>();
}
